package com.szy.news.update;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.AsyncTask;
import android.util.Log;
import android.webkit.URLUtil;
import android.widget.Toast;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.Properties;
import org.xml.sax.InputSource;
import java.text.SimpleDateFormat;
import java.util.Date;

public class UpdateVer extends Activity {
	private static final String TAG = "DOWNLOADAPK";
	//旧版本号
	private String PastVersion;
	//新版本号
	private String NowVersion;
	//进度条
	public ProgressDialog pBar;
	//文件
	private String currentFilePath = "";
	//预安装软件的扩展名
	private String fileEx = "";
	//软件名称
	private String fileNa = "";
//	private String strURL = "http://192.168.137.1:8080/web/RuoshuiNews.apk";
//	private String VersionUri = "http://192.168.137.1:8080/web/ver_apk.xml";
	//远程要下载的软件
	private String strURL =     "http://172.27.35.1:8080/web/RuoshuiNews.apk";
	//自己后台的一个版本号的web服务
	private String VersionUri = "http://172.27.35.1:8080/web/ver_apk.xml";
	private Context mContext;
	private final String fileVer = "ver.cfg";

	public UpdateVer(String urlapk, String urlver, final Context context) {
		SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
		String ver = "?ver=" + df.format(new Date());// 主要是避开手机的缓存
		strURL = urlapk + ver;
		VersionUri = urlver + ver;
		mContext = context;
	}

	public void checkVer() {
		// 解析Version网页，获取版本号
		getVersionxml(VersionUri);
	}

	private void compareVer() {
		load();

		// 当有最新版本的时候
//		if (PastVersion != null && !PastVersion.equals(NowVersion)) {
		if (PastVersion != null && PastVersion!= NowVersion) {
			Dialog dialog = new AlertDialog.Builder(mContext)
					.setTitle("系统更新")
					.setMessage(
							String.format("发现新版本%s，目前版本为%s", NowVersion,
									PastVersion))
					// 设置内容
					// 设置确定按钮
					.setPositiveButton("确定",new DialogInterface.OnClickListener() {
								@Override
								public void onClick(DialogInterface dialog,
										int which) {
									pBar = new ProgressDialog(mContext);
									pBar.setTitle("正在下载");
									pBar.setMessage("请稍候...");
									pBar.setProgressStyle(ProgressDialog.STYLE_SPINNER);
									fileEx = strURL.substring(
											strURL.lastIndexOf(".") + 1,
											strURL.length()).toLowerCase();
									fileEx = fileEx.substring(0,
											fileEx.lastIndexOf("?"));
									fileNa = strURL.substring(
											strURL.lastIndexOf("/") + 1,
											strURL.lastIndexOf("."));
									getFile(strURL);
								}
							})
					.setNegativeButton("取消",new DialogInterface.OnClickListener() {
								@Override
								public void onClick(DialogInterface dialog,
										int whichButton) {
									// 点击"取消"按钮之后退出程序
								}
							}).create();// 创建
			// 显示对话框
			dialog.show();
		}
		//当前为最新版本
		else {
			Toast.makeText(mContext, String.format("当前为最新版本%s"+ PastVersion),
					Toast.LENGTH_LONG).show();
		}
	}
	//处理下载URL文件自定义函数
	private void getFile(final String strPath) {
		pBar.show();
		try {
			if (strPath.equals(currentFilePath)) {
				getDataSource(strPath);
			}
			currentFilePath = strPath;
			Runnable r = new Runnable() {
				@Override
				public void run() {
					try {
						getDataSource(strPath);
					} catch (Exception e) {
						Log.e(TAG, e.getMessage(), e);
					}
				}
			};
			new Thread(r).start();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/* 取得远程文件 */
	private void getDataSource(String strPath) throws Exception {
		if (!URLUtil.isNetworkUrl(strPath)) {
			Log.d("Tag", "error");
		} else {
			/* 取得URL */
			URL myURL = new URL(strPath);
			/* 建立联机 */
			URLConnection conn = myURL.openConnection();
			conn.connect();
			/* InputStream 下载文件 */
			InputStream is = conn.getInputStream();
			if (is == null) {
				Log.d("tag", "error");
				throw new RuntimeException("没有读取到文件内容");
			}
			/* 建立临时文件 */
			File myTempFile = File.createTempFile(fileNa, "." + fileEx);
			myTempFile.getAbsolutePath();
			/* 将文件写入临时盘 */
			FileOutputStream fos = new FileOutputStream(myTempFile);
			byte buf[] = new byte[128];
			do {
				int numread = is.read(buf);
				if (numread <= 0) {
					break;
				}
				fos.write(buf, 0, numread);
			} while (true);

			/* 打开文件进行安装 */
			openFile(myTempFile);
			try {
				is.close();
			} catch (Exception ex) {
				Log.d("Tag", "error");
				Log.e(TAG, "error: " + ex.getMessage(), ex);
			}
		}
	}

	/* 在手机上打开文件 */
	private void openFile(File f) {
		pBar.cancel();
		Intent intent = new Intent();
		intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
		intent.setAction(android.content.Intent.ACTION_VIEW);
		/* 调用getMIMEType()来取得MimeType */
		String type = getMIMEType(f);
		/* 设定intent的file与MimeType */
		intent.setDataAndType(Uri.fromFile(f), type);
		mContext.startActivity(intent);
	}

	/* 判断文件MimeType的method */
	private String getMIMEType(File f) {
		String type = "";
		String fName = f.getName();
		/* 取得扩展名 */
		String end = fName
				.substring(fName.lastIndexOf(".") + 1, fName.length())
				.toLowerCase();

		/* 按扩展名的类型决定MimeType */
		if (end.equals("m4a") || end.equals("mp3") || end.equals("mid")
				|| end.equals("xmf") || end.equals("ogg") || end.equals("wav")) {
			type = "audio";
		} else if (end.equals("3gp") || end.equals("mp4")) {
			type = "video";
		} else if (end.equals("jpg") || end.equals("gif") || end.equals("png")
				|| end.equals("jpeg") || end.equals("bmp")) {
			type = "image";
		} else if (end.equals("apk")) {
			/* android.permission.INSTALL_PACKAGES */
			type = "application/vnd.android.package-archive";
		} else {
			type = "*";
		}
		/* 如果无法直接打开，就跳出软件清单给使用者选择 */
		if (!end.equals("apk")) {
			type += "/*";
		}
		return type;
	}

	private void getVersionxml(String resourceUrl) {
		GetVer gv = new GetVer();
		gv.execute(resourceUrl);
	}

	private boolean load() {
		Properties properties = new Properties();
		try {
			InputStream stream = mContext.getAssets().open(fileVer);
			// FileInputStream stream = mContext.openFileInput(fileVer);
			// 读取文件内容
			properties.load(stream);
		} catch (FileNotFoundException e) {
			return false;
		} catch (IOException e) {
			return false;
		} catch (Exception e) {
			return false;
		}
		PastVersion = String.valueOf(properties.get("Version").toString());
		return true;
	}

	// ==========================================================================
	// GetVer
	// ==========================================================================
	class GetVer extends AsyncTask<String, Integer, String> {
		@Override
		protected String doInBackground(String... urlVer) {
			String db = null;
			URL url = null;

			try {
				url = new URL(urlVer[0]);
			} catch (MalformedURLException e) {
				e.printStackTrace();
			}
			InputSource is = null;
			try {
				is = new InputSource(url.openStream());
				is.setEncoding("UTF-8");
				db = SAXGetVersionService.readRssXml(is);
			} catch (Exception e) {
				e.printStackTrace();
			}
			return db;
		}

		@Override
		protected void onCancelled() {
			super.onCancelled();
		}

		@Override
		protected void onPostExecute(String result) {
			NowVersion = result;
			compareVer();
		}
	}
}

//import android.app.Activity;
//import android.app.AlertDialog;
//import android.app.Dialog;
//import android.app.ProgressDialog;
//import android.content.Context;
//import android.content.DialogInterface;
//import android.content.Intent;
//import android.net.Uri;
//import android.os.Bundle;
//import android.os.Handler;
//import android.util.Log;
//import android.view.Menu;
//import android.view.MenuItem;
//import android.webkit.URLUtil;
//import android.widget.Toast;
//
//import java.io.File;
//import java.io.FileInputStream;
//import java.io.FileNotFoundException;
//import java.io.FileOutputStream;
//import java.io.IOException;
//import java.io.InputStream;
//import java.net.MalformedURLException;
//import java.net.URL;
//import java.net.URLConnection;
//import java.util.Properties;
//
//import org.xml.sax.InputSource;
//
//import com.szy.news.activity.R;
//
//
//
//
//public class UpdateVer extends Activity {
//	private static final String TAG = "DOWNLOADAPK";
//	// 就版本号
//    private String PastVersion;
//    // 新版本号
//    private String NowVersion;
//    //进度条
//    public ProgressDialog pBar; 
//    //文件
//    private String currentFilePath = ""; 
//    //预安装软件的扩展名
//   private String fileEx="";
//    //软件名称
//   private String fileNa="";
//    //远程要下载的软件　
//   private String strURL=		"http://172.27.35.1:8080/web/RuoshuiNews.apk";
//   // 自己后台的一个版本号的 web  服务
//   private String VersionUri =	"http://172.27.35.1:8080/web/ver_apk.xml";
//   		@Override
//   		public void onCreate(Bundle savedInstanceState) {
//   			super.onCreate(savedInstanceState);
//   			setContentView(R.layout.activity_set);
//    }
//   @Override
//   public boolean onCreateOptionsMenu(Menu menu) {
//        menu.add(Menu.NONE, Menu.FIRST + 1, 5, "检测更新").setIcon(
//        android.R.drawable.ic_menu_upload);
//        menu.add(Menu.NONE,Menu.FIRST+2,4,"退出").setIcon(android.R.drawable.ic_menu_delete);
//        // setIcon()方法为菜单设置图标，这里使用的是系统自带的图标，同学们留意一下,以
//        // android.R开头的资源是系统提供的，我们自己提供的资源是以R开头的
//        //downLoadFile("http://gdown.baidu.com/data/wisegame/82272d43548dbe25/shuiguorenzhezhongwen.apk");
//        return true;
//    }
//    @Override
//    public boolean onOptionsItemSelected(MenuItem item) {
//     // 解析Version网页，获取版本号
//    NowVersion  =getVersionxml(VersionUri);
//    // 装载获取当前的版本号
//    load ();    
//     //当有最新版本的时候
//    if(PastVersion != null&&!PastVersion.equals(NowVersion)){    
//    //保存最新版本号	
//    	save();
//       Dialog dialog = new AlertDialog.Builder(UpdateVer.this).setTitle("系统更新")       
//             .setMessage("发现新版本，请更新！")// 设置内容       
//             .setPositiveButton("确定",// 设置确定按钮       
//                        new DialogInterface.OnClickListener() {       
//                            public void onClick(DialogInterface dialog,       
//                                   int which) {       
//                                       pBar = new ProgressDialog(UpdateVer.this);       
//                                       pBar.setTitle("正在下载");       
//                                       pBar.setMessage("请稍候...");       
//                                       pBar.setProgressStyle(ProgressDialog.STYLE_SPINNER);            
//                                       fileEx = strURL.substring(strURL.lastIndexOf(".")+1,strURL.length()).toLowerCase();
//                                        fileNa = strURL.substring(strURL.lastIndexOf("/")+1,strURL.lastIndexOf("."));
//                                        getFile(strURL);    
//                            }       
//                       }).setNegativeButton("取消",         
//                    new DialogInterface.OnClickListener() {       
//                       public void onClick(DialogInterface dialog,       
//                               int whichButton) {       
//                            // 点击"取消"按钮之后退出程序         
//                        }       
//                    }).create();// 创建       
//            // 显示对话框       
//         dialog.show();       
//    }else{//当前为最新版本时
//    	Toast.makeText(this, "当前为最新版本", Toast.LENGTH_LONG).show();
//    }
//   return false;
//   }     
//    //处理下载URL文件自定义函数
//    private void getFile(final String strPath) { 
//    	pBar.show();
//    	try{ 
//          if (strPath.equals(currentFilePath) ){ 
//        	  getDataSource(strPath);  
//          }     
//          currentFilePath = strPath;      
//          Runnable r = new Runnable() {   
//          public void run() {   
//        	try{ 
//        		getDataSource(strPath); 
//        	}catch(Exception e){ 
//        	    Log.e(TAG, e.getMessage(), e); 
//        	} 
//          }
//        };   
//        	  new Thread(r).start(); 
//       }catch(Exception e){ 
//        e.printStackTrace();
//      }
//   } 
//    
//   /*取得远程文件*/ 
//   private void getDataSource(String strPath) throws Exception {
//	   if(!URLUtil.isNetworkUrl(strPath)) {
//            Log.d("Tag","error");
//      }else{ //取得URL
//            URL myURL = new URL(strPath); 
//            //建立联机
//            URLConnection conn = myURL.openConnection();   
//            conn.connect();            
//            //InputStream 下载文件
//            InputStream is = conn.getInputStream();   
//            if (is == null){  
//              Log.d("tag","error");
//              throw new RuntimeException("stream is null"); 
//            } 
//            //建立临时文件 
//            File myTempFile = File.createTempFile(fileNa, "."+fileEx); 
//            myTempFile.getAbsolutePath();        
//            //将文件写入临时盘 
//            FileOutputStream fos = new FileOutputStream(myTempFile); 
//           byte buf[] = new byte[128];   
//           do{   
//        	   int numread = is.read(buf);   
//               if (numread <= 0){ 
//            	   break; 
//               } 
//               fos.write(buf, 0, numread);   
//            }while (true);              
//            /*打开文件进行安装*/
//           openFile(myTempFile);
//           try { 
//        	   is.close(); 
//           }catch (Exception ex) { 
//              Log.d("Tag","error");
//              Log.e(TAG, "error: " + ex.getMessage(), ex); 
//           } 
//      }
//   } 
//   // 在手机上打开文件的method 
//   private void openFile(File f)  {
//	   pBar.cancel();
//       Intent intent = new Intent();
//       intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//       intent.setAction(android.content.Intent.ACTION_VIEW);           
//       // 调用getMIMEType()来取得MimeType 
//       String type = getMIMEType(f);
//       //设定intent的file与MimeType 
//       intent.setDataAndType(Uri.fromFile(f),type);
//       startActivity(intent); 
//   }
//  // 判断文件MimeType的method 
//  private String getMIMEType(File f){ 
//	  String type="";
//      String fName=f.getName();
//      // 取得扩展名 
//      String end=fName.substring(fName.lastIndexOf(".")+1,fName.length()).toLowerCase(); 
//      // 按扩展名的类型决定MimeType 
//      if(end.equals("m4a")||end.equals("mp3")||end.equals("mid")||end.equals("xmf")||end.equals("ogg")||end.equals("wav")){
//    	   type = "audio"; 
//       }else if(end.equals("3gp")||end.equals("mp4")){
//    	   type = "video";
//       }else if(end.equals("jpg")||end.equals("gif")||end.equals("png")||end.equals("jpeg")||end.equals("bmp")){
//    	   type = "image";
//       }else if(end.equals("apk")) { 
//    	   // android.permission.INSTALL_PACKAGES 
//    	   type = "application/vnd.android.package-archive"; 
//       }else{
//    	   type="*";
//       }
//      //如果无法直接打开，就跳出软件清单给使用者选择 
//      if(end.equals("apk")){ 
//    	  
//      }else{ 	
//    	  type += "/*";  
//      } 
//      return type;  
//
//  }
//    //删除存储卡内的临时文件
//    private void delFile(String strFileName){ 
//    	File myFile = new File(strFileName); 
//        if(myFile.exists()){ 
//        	myFile.delete(); 
//        } 
//    } 
//   //SAX解析resourceUrl 页面的内
//   public String getVersionxml(String resourceUrl){
//	   String db = null;
//	   URL url = null;
//       try {
//    	   url = new URL(resourceUrl);
//       } catch (MalformedURLException e) {
//    	   e.printStackTrace();
//       }  
//       InputSource is=null; 
//       InputStream stream = null;
//       try { 
//    	   is = new InputSource(url.openStream()); 
//           is.setEncoding("UTF-8");   
//           db = SAXGetVersionService.readRssXml(is);
//       }catch (Exception e) {
//           e.printStackTrace();
//       } 
//       return db;
//
//   }
//
//   @Override
//   public void onOptionsMenuClosed(Menu menu) {
//      //    Toast.makeText(this, "选项菜单关闭了", Toast.LENGTH_LONG).show();
//   }
//   
//   @Override
//   public boolean onPrepareOptionsMenu(Menu menu) {
//   //    Toast.makeText(this,
//   //    "选项菜单显示之前onPrepareOptionsMenu方法会被调用，你可以用此方法来根据打当时的情况调整菜单",
//   //    Toast.LENGTH_LONG).show();
//   // 如果返回false，此方法就把用户点击menu的动作给消费了，onCreateOptionsMenu方法将不会被调用
//	   return true;
//   }
//   //转载旧的版本号
//   boolean load ()
//   {
//	   Properties properties = new Properties();
//	   try{
//		   FileInputStream stream = this.openFileInput("ver.cfg");
//		   //读取文件内容
//		   properties.load(stream);    
//       }catch (FileNotFoundException e){
//    	   return false;
//       }catch(IOException e){
//    	   return false;
//       }
//	   PastVersion = String.valueOf(properties.get("Version").toString());    
//	   return true;
//   }
//  //保存最新版本号
//   boolean save(){
//	   Properties properties = new Properties();
//	   properties.put("Version", NowVersion);
//	   try{
//		   FileOutputStream stream = this.openFileOutput("ver.cfg",Context.MODE_WORLD_WRITEABLE);
//		   properties.store(stream,"");
//	   }catch (FileNotFoundException e){
//		   return false;
//       }catch(IOException e){
//    	   return false;
//       }
//	   return true;
//
//    }
//}
//
